import type {
  DepartmentSet,
  PwdChange,
  UserInfo,
  UserList,
  UserLogin,
  UserRegister,
  UserUpdateAdmin,
  UserUpdateCurrent,
} from '~/types/user'
import { get, post, put } from '~/utils/request'

/**
 * 用户注册
 * @param {UserRegister} data - 用户注册信息
 * @returns {Promise<any>} 注册结果
 */
export function userRegister(data: UserRegister): Promise<any> {
  return post('/users/register', data)
}

/**
 * 用户登录
 * @param {UserLogin} data - 用户登录凭证
 * @returns {Promise<{token: string, refreshToken: string}>} 包含访问令牌和刷新令牌的对象
 */
export function userLogin(data: UserLogin): Promise<{ token: string, refreshToken: string, user: UserInfo }> {
  return post('/users/login', data)
}

/**
 * 获取当前用户信息
 * @returns {Promise<UserInfo>} 当前用户信息
 */
export function getCurrentUser(): Promise<UserInfo> {
  return get('/users/me')
}

/**
 * 更新当前用户资料
 * @param {UserUpdateCurrent} data - 要更新的用户资料
 * @returns {Promise<UserInfo>} 更新后的用户信息
 */
export function updateCurrentUser(data: UserUpdateCurrent): Promise<UserInfo> {
  return put('/users/profile', data)
}

/**
 * 修改当前用户密码
 * @param {PwdChange} data - 包含旧密码和新密码的对象
 * @returns {Promise<{message: string}>} 操作结果消息
 */
export function changePassword(data: PwdChange): Promise<{ message: string }> {
  return put('/users/change-password', data)
}

/**
 * 获取所有用户列表
 * @returns {Promise<UserList>} 用户列表
 */
export function getAllUsers(): Promise<UserList> {
  return get('/users/all')
}

/**
 * 根据ID获取用户信息
 * @param {number} id - 用户ID
 * @returns {Promise<UserInfo>} 用户信息
 */
export function getUserById(id: number): Promise<UserInfo> {
  return get(`/users/${id}`)
}

/**
 * 管理员更新用户信息
 * @param {number} id - 用户ID
 * @param {UserUpdateAdmin} data - 要更新的用户信息
 * @returns {Promise<UserInfo>} 更新后的用户信息
 */
export function updateUserAdmin(id: number, data: UserUpdateAdmin): Promise<UserInfo> {
  return put(`/users/${id}`, data)
}

/**
 * 管理员重置用户密码
 * @param {number} id - 用户ID
 * @returns {Promise<{message: string}>} 操作结果消息
 */
export function resetUserPassword(id: number): Promise<{ message: string }> {
  return post(`/users/${id}/reset-password`, {})
}

/**
 * 刷新访问令牌
 * @param {string} refreshToken - 刷新令牌
 * @returns {Promise<{token: string}>} 包含新访问令牌的对象
 */
export function refreshToken(refreshToken: string): Promise<{ token: string }> {
  return post('/users/refresh', { refreshToken })
}

/**
 * 设置用户部门
 * @param {number} id - 用户ID
 * @param {DepartmentSet} data - 部门设置信息
 * @returns {Promise<UserInfo>} 更新后的用户信息
 */
export function setUserDepartment(id: number, data: DepartmentSet): Promise<UserInfo> {
  return put(`/users/${id}/department`, data)
}
